"The SNES9x savestate file format" v0.1 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ by creaothceann 1. Content ŻŻŻŻŻŻŻŻŻŻ 1. Content 2. Disclaimer 3. Revisions 4. Conventions 5. Savestates 6. File blocks 7. Unstructured file blocks 8. Structured file blocks 9. Variables 2. Disclaimer ŻŻŻŻŻŻŻŻŻŻŻŻŻ The information herein is provided as-is for anything you want. I tried to make it as accurate as possible, but that might not mean much. And specifications can change at any time, too. Nevertheless this document should be helpful, unless the savestate file format was _completely_ revamped since the last revision. 3. Revisions ŻŻŻŻŻŻŻŻŻŻŻŻ 2007-10-09: initial version 0.1 no sub-structure details yet 4. Conventions ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ I'll be using the following data types: Byte = unsigned 8-bit integer: $00..$00000000000000FF Word = unsigned 16-bit integer: $00..$000000000000FFFF DWord = unsigned 32-bit integer: $00..$00000000FFFFFFFF QWord = unsigned 64-bit integer: $00..$FFFFFFFFFFFFFFFF Int64 = signed 64-bit integer: -(2^63)..(2^63 - 1) Boolean = 8-bit type: 'False' (no bit set), 'True' (any bit set) Char = 8-bit type: ANSI/ASCII character "Array[x] of y" simply means: "x variables of type y without any padding bytes between them". The structures listed here also have no empty space between their variables. 5. Savestates ŻŻŻŻŻŻŻŻŻŻŻŻŻ SNES9x savestates (also called "freeze files" or "snapshots") have the filename extension '.00x', with 'x' being a decimal digit ('0'..'9'). The files are usually compressed with GZIP; they can be decompressed with tools like WinRAR. The GZIP library (and hence SNES9x) can also handle uncompressed files. At the beginning of the file there's a file header: Signature : Array[8] of Char Colon : Char Version : Array[4] of Char LineFeed : Char "Signature" must be the string '#!snes9x', "Colon" must be ':', and "LineFeed" should be the ASCII character #10. "Version" should be the decimal number string '0001'; otherwise the file format itself would be a newer one. The rest of the savestate is structured into file blocks of variable size. 6. File blocks ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ In an uncompressed file they look like this: Name : Array[3] of Char Separator1 : Char Size : Array[6] of Char Separator2 : Char Data : Array[Size] of Byte "Name" identifies the file block type. "Separator1" and "Separator2" contain the ASCII character #58 (colon ':'). "Size" is a decimal number string describing the number of bytes in the "Data" part. The standard file block order is like this: block 01: NAM block 02: CPU block 03: REG block 04: PPU block 05: DMA block 06: VRA block 07: RAM block 08: SRA block 09: FIL block 10: APU (if emulating the APU) block 11: ARE (if emulating the APU) block 12: ARA (if emulating the APU) block 13: SOU (if emulating the APU) block 14: SA1 (if emulating the SA-1) block 15: SAR (if emulating the SA-1) block 16: SP7 (if emulating the SPC7110) block 17: RTC (if emulating the SPC7110 RTC) File readers should accept the blocks in any order though, even several blocks of the same type. ================================================================================================ 7. Unstructured file blocks ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ The following block types are simple byte or char arrays: 7.1 ARA (APU RAM) 7.2 FIL (FillRAM) 7.3 NAM (cartridge name) 7.4 RAM (WRAM data) 7.5 SRA (SRAM data) 7.6 VRA (VRAM data) Unstructured file blocks are just streamed to disk. 7.1 ARA = Array[65536] of Byte ŻŻŻŻŻŻŻ The "audio processing unit" (APU) RAM, which stores BRR-encoded samples and the program to play them. Note that read accesses to $FFC0..$FFFF can return either RAM as normal, or they can access the content of the 64-byte "IPL ROM" that is responsible for data communications after a reset. SNES9x handles that by defining a variable called "ExtraRAM" (see the APU file block), which is used when RAM is selected. 7.2 FIL = Array[$0000..$7FFF] of Byte ŻŻŻŻŻŻŻ In the SNES9x code, "FillRAM" is a pointer to 32 KB of scratch memory. Whenever the 65c816 does a write access to addresses $xx:0000..$xx:7FFF, the value is also written into this array. With "FillRAM" the developers can access registers by address rather than by name. 7.3 NAM = Array[?] of Char ŻŻŻŻŻŻŻ A null-terminated string storing the filename of the cartridge ROM, as returned by the OS. The block size is the length of the string plus the terminating byte (ASCII #0). The string should not be treated as readable since there's no encoding. It's just used to detect if the previously loaded ROM matches the currently loaded one. 7.4 RAM = Array[65536 * 2] of Byte ŻŻŻŻŻŻŻ The "work RAM" (WRAM) data, usually accessed via banks $7E and $7F. 7.5 SRA = Array[65536] of Byte ŻŻŻŻŻŻŻ The "Save RAM" (SRAM) data, used by cartridges. SNES9x loads/saves only that much from/to savestates, but otherwise uses 128 KB in the rest of the program. Maybe just an oversight, or the data for cartridges with larger SRAM chips is stored elsewhere? 7.6 VRA = Array[65536] of Byte ŻŻŻŻŻŻŻ The "video RAM" (VRAM) data, which the SNES stores in two RAM chips. In this savestate block the even-numbered bytes (0, 2, 4, ...) are from the first memory chip; the odd-numbered bytes are from the second one. This is also how most other emulators, e.g. ZSNES, do it. (The exception is Super Sleuth, which stores the content of the two chips in two separate arrays.) ================================================================================================ 8. Structured file blocks ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ The following block types contain variables, like a Pascal "record" or a C/C++ "struct": 8.01 APU (APU status) 8.02 ARE (APU registers) 8.03 CPU (CPU status) 8.04 DMA (DMA/HDMA channels) 8.05 PPU (PPU status) 8.06 REG (CPU registers) 8.07 RTC (SPC7110 RTC status) 8.08 SA1 (SA-1 status) 8.09 SAR (SA-1 registers) 8.10 SP7 (SPC7110 status) 8.11 SOU (sound data) Variables consisting of multiple bytes must be stored in big-endian format. (Just for the record, the x86/Windows platform is little-endian.) 8.1 APU ŻŻŻŻŻŻŻ The status of the audio processing unit. Cycles : DWord ShowROM : Boolean Flags : Byte KeyedChannels : Byte OutPorts : Array[ 4] of Byte DSP : Array[128] of Byte ExtraRAM : Array[ 64] of Byte Timer : Array[ 3] of Word TimerTarget : Array[ 3] of Word TimerEnabled : Array[ 3] of Boolean TimerValueWritten : Array[ 3] of Boolean Multi-byte variables must be stored in big-endian format. 8.2 ARE ŻŻŻŻŻŻŻ The "APU registers", i.e. the registers of the Sony "SPC700" audio processor. P : Byte YA : Word X : Byte S : Byte PC : Word Multi-byte variables must be stored in big-endian format. 8.3 CPU ŻŻŻŻŻŻŻ The status of the main processor "Ricoh 5A22", which is based on WDC/GTE's "65c816" core. Flags : DWord BranchSkip : Boolean NMIActive : Boolean IRQActive : Boolean WaitingForInterrupt : Boolean WhichEvent : Byte Cycles : DWord NextEvent : DWord V_Counter : DWord MemSpeed : DWord MemSpeedx2 : DWord FastROMSpeed : DWord Multi-byte variables must be stored in big-endian format. 8.4 DMA ŻŻŻŻŻŻŻ The "DMA" file block consists of 8 sub-structures, one for each DMA/HDMA channel. They look like this: TransferDirection : Boolean AAddressFixed : Boolean AAddressDecrement : Boolean TransferMode : Byte ABank : Byte AAddress : Word Address : Word BAddress : Byte TransferBytes : Word HDMAIndirectAddressing : Boolean IndirectAddress : Word IndirectBank : Byte Repeat : Byte LineCount : Byte FirstLine : Byte Multi-byte variables must be stored in big-endian format. 8.5 PPU ŻŻŻŻŻŻŻ The status of the two PPU (picture-processing unit) chips, and some joypad and mouse data. BGMode : Byte BG3Priority : Boolean Brightness : Byte VMA : 1 "VMA" structure BG : 4 "BG" structures CGFLIP : Boolean CGDATA : Array[256] of Word FirstSprite : Byte OBJ : 128 "OBJ" structures OAMPriorityRotation : Boolean OAMAddr : Word OAMFlip : Boolean OAMTileAddress : Word IRQVBeamPos : Word IRQHBeamPos : Word VBeamPosLatched : Word HBeamPosLatched : Word HBeamFlip : Byte VBeamFlip : Byte HVBeamCounterLatched : Boolean MatrixA : Word MatrixB : Word MatrixC : Word MatrixD : Word CentreX : Word CentreY : Word Joypad1ButtonReadPos : Byte Joypad2ButtonReadPos : Byte Joypad3ButtonReadPos : Byte CGADD : Byte FixedColourRed : Byte FixedColourGreen : Byte FixedColourBlue : Byte SavedOAMAddr : Word ScreenHeight : Word WRAM : DWord ForcedBlanking : Boolean OBJNameSelect : Word OBJSizeSelect : Byte OBJNameBase : Word OAMReadFlip : Boolean VTimerEnabled : Boolean HTimerEnabled : Boolean HTimerPosition : Word Mosaic : Byte Mode7HFlip : Boolean Mode7VFlip : Boolean Mode7Repeat : Boolean Window1Left : Byte Window1Right : Byte Window2Left : Byte Window2Right : Byte ClipWindowOverlapLogic : Array[6] of Byte ClipWindow1Enable : Array[6] of Boolean ClipWindow2Enable : Array[6] of Boolean ClipWindow1Inside : Array[6] of Boolean ClipWindow2Inside : Array[6] of Boolean CGFLIPRead : Boolean Need16x8Mulitply : Boolean BGMosaic : Array[4] of Boolean OAMData : Array[544] of Byte Need16x8Mulitply_2 : Boolean MouseSpeed : Array[2] of Byte Multi-byte variables must be stored in big-endian format. 8.6 REG ŻŻŻŻŻŻŻ The registers of the 65c816. PB : Byte DB : Byte P : Word A : Word D : Word S : Word X : Word Y : Word PC : Word Multi-byte variables must be stored in big-endian format. 8.7 RTC ŻŻŻŻŻŻŻ The status of the SPC7110's real-time clock. reg : Array[16] of Byte index : Word control : Byte init : Boolean last_used : DWord Multi-byte variables must be stored in big-endian format. 8.8 SA1 ŻŻŻŻŻŻŻ The status of the SA-1, which is another "65c816" clocked at 10 MHz. Flags : DWord NMIActive : Boolean IRQActive : Boolean WaitingForInterrupt : Boolean op1 : Word op2 : Word arithmetic_op : DWord sum : Int64 overflow : Boolean Multi-byte variables must be stored in big-endian format. 8.9 SAR ŻŻŻŻŻŻŻ The SA-1 processor registers. PB : Byte DB : Byte P : Word A : Word D : Word S : Word X : Word Y : Word PC : Word Multi-byte variables must be stored in big-endian format. 8.10 SP7 ŻŻŻŻŻŻŻŻ The status of the "SPC7110", which is a data decompression chip. reg4800 : Byte reg4801 : Byte reg4802 : Byte reg4803 : Byte reg4804 : Byte reg4805 : Byte reg4806 : Byte reg4807 : Byte reg4808 : Byte reg4809 : Byte reg480A : Byte reg480B : Byte reg480C : Byte reg4811 : Byte reg4812 : Byte reg4813 : Byte reg4814 : Byte reg4815 : Byte reg4816 : Byte reg4817 : Byte reg4818 : Byte reg4820 : Byte reg4821 : Byte reg4822 : Byte reg4823 : Byte reg4824 : Byte reg4825 : Byte reg4826 : Byte reg4827 : Byte reg4828 : Byte reg4829 : Byte reg482A : Byte reg482B : Byte reg482C : Byte reg482D : Byte reg482E : Byte reg482F : Byte reg4830 : Byte reg4831 : Byte reg4832 : Byte reg4833 : Byte reg4834 : Byte reg4840 : Byte reg4841 : Byte reg4842 : Byte AlignBy : Byte written : Byte offset_add : Byte DataRomOffset : DWord DataRomSize : DWord bank50Internal : DWord bank50 : Array[65536] of Byte Multi-byte variables must be stored in big-endian format. 8.11 SOU ŻŻŻŻŻŻŻŻ The status of the APU's DSP. On the SNES, these settings are accessed by the SPC700 by writing to address $00F2 (selects a DSP address) and reading/writing $00F3 (reads/writes a DSP register value). master_volume_left : Word master_volume_right : Word echo_volume_left : Word echo_volume_right : Word echo_enable : DWord echo_feedback : DWord echo_ptr : DWord echo_buffer_size : DWord echo_write_enabled : DWord echo_channel_enable : DWord pitch_mod : DWord dummy : Array[3] of DWord channel : 8 "SoundChn" structures Multi-byte variables must be stored in big-endian format. ================================================================================================ 9. Variables ŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] Cycles ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] ShowROM ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] Flags ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] KeyedChannels ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] OutPorts ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] DSP ŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] ExtraRAM ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] Timer ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] TimerTarget ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] TimerEnabled ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.1 [APU] TimerValueWritten ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.2 [ARE] P ŻŻŻŻŻŻŻŻŻŻŻ 9.2 [ARE] YA ŻŻŻŻŻŻŻŻŻŻŻŻ 9.2 [ARE] X ŻŻŻŻŻŻŻŻŻŻŻ 9.2 [ARE] S ŻŻŻŻŻŻŻŻŻŻŻ 9.2 [ARE] PC ŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] Flags ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] BranchSkip ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] NMIActive ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] IRQActive ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] WaitingForInterrupt ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] WhichEvent ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] Cycles ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] NextEvent ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] V_Counter ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] MemSpeed ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] MemSpeedx2 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.3 [CPU] FastROMSpeed ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] TransferDirection ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] AAddressFixed ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] AAddressDecrement ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] TransferMode ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] ABank ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] AAddress ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] Address ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] BAddress ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] TransferBytes ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] HDMAIndirectAddressing ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] IndirectAddress ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] IndirectBank ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] Repeat ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] LineCount ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.4 [DMA] FirstLine ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] BGMode ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] BG3Priority ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Brightness ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] VMA ŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] BG ŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] CGFLIP ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] CGDATA ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] FirstSprite ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OBJ ŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OAMPriorityRotation ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OAMAddr ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OAMFlip ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OAMTileAddress ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] IRQVBeamPos ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] IRQHBeamPos ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] VBeamPosLatched ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] HBeamPosLatched ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] HBeamFlip ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] VBeamFlip ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] HVBeamCounterLatched ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] MatrixA ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] MatrixB ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] MatrixC ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] MatrixD ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] CentreX ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] CentreY ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Joypad1ButtonReadPos ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Joypad2ButtonReadPos ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Joypad3ButtonReadPos ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] CGADD ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] FixedColourRed ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] FixedColourGreen ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] FixedColourBlue ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] SavedOAMAddr ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] ScreenHeight ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] WRAM ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] ForcedBlanking ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OBJNameSelect ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OBJSizeSelect ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OBJNameBase ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OAMReadFlip ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] VTimerEnabled ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] HTimerEnabled ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] HTimerPosition ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Mosaic ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Mode7HFlip ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Mode7VFlip ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Mode7Repeat ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Window1Left ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Window1Right ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Window2Left ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Window2Right ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] ClipWindowOverlapLogic ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] ClipWindow1Enable ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] ClipWindow2Enable ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] ClipWindow1Inside ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] ClipWindow2Inside ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] CGFLIPRead ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Need16x8Mulitply ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] BGMosaic ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] OAMData ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] Need16x8Mulitply_2 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.5 [PPU] MouseSpeed ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.6 [REG] PB ŻŻŻŻŻŻŻŻŻŻŻŻ 9.6 [REG] DB ŻŻŻŻŻŻŻŻŻŻŻŻ 9.6 [REG] P ŻŻŻŻŻŻŻŻŻŻŻ 9.6 [REG] A ŻŻŻŻŻŻŻŻŻŻŻ 9.6 [REG] D ŻŻŻŻŻŻŻŻŻŻŻ 9.6 [REG] S ŻŻŻŻŻŻŻŻŻŻŻ 9.6 [REG] X ŻŻŻŻŻŻŻŻŻŻŻ 9.6 [REG] Y ŻŻŻŻŻŻŻŻŻŻŻ 9.6 [REG] PC ŻŻŻŻŻŻŻŻŻŻŻŻ 9.7 [RTC] reg ŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.7 [RTC] index ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.7 [RTC] control ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.7 [RTC] init ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.7 [RTC] last_used ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.8 [SA1] Flags ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.8 [SA1] NMIActive ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.8 [SA1] IRQActive ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.8 [SA1] WaitingForInterrupt ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.8 [SA1] op1 ŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.8 [SA1] op2 ŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.8 [SA1] arithmetic_op ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.8 [SA1] sum ŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.8 [SA1] overflow ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.9 [SAR] PB ŻŻŻŻŻŻŻŻŻŻŻŻ 9.9 [SAR] DB ŻŻŻŻŻŻŻŻŻŻŻŻ 9.9 [SAR] P ŻŻŻŻŻŻŻŻŻŻŻ 9.9 [SAR] A ŻŻŻŻŻŻŻŻŻŻŻ 9.9 [SAR] D ŻŻŻŻŻŻŻŻŻŻŻ 9.9 [SAR] S ŻŻŻŻŻŻŻŻŻŻŻ 9.9 [SAR] X ŻŻŻŻŻŻŻŻŻŻŻ 9.9 [SAR] Y ŻŻŻŻŻŻŻŻŻŻŻ 9.9 [SAR] PC ŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4800 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4801 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4802 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4803 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4804 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4805 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4806 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4807 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4808 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4809 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg480A ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg480B ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg480C ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4811 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4812 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4813 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4814 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4815 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4816 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4817 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4818 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4820 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4821 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4822 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4823 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4824 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4825 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4826 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4827 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4828 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4829 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg482A ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg482B ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg482C ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg482D ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg482E ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg482F ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4830 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4831 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4832 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4833 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4834 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4840 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4841 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] reg4842 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] AlignBy ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] written ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] offset_add ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] DataRomOffset ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] DataRomSize ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] bank50Internal ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.10 [SP7] bank50 ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] master_volume_left ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] master_volume_right ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] echo_volume_left ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] echo_volume_right ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] echo_enable ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] echo_feedback ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] echo_ptr ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] echo_buffer_size ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] echo_write_enabled ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] echo_channel_enable ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] pitch_mod ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] dummy ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 9.11 [SOU] channel ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF